// 第1题：假设一个算术表达式中可以包含三中括号：圆括号“（”和“）”，
// 方括号“[”和“]”以及花括号与“{”和“}”，且这三种括号可按任意的次序嵌套试用，
// 如（.. .[.. .{.. .}.. .[.. .].. .].. .(  .. .[.. .].. .)。
// 试利用栈的运算编写判断给定表达式中所含括号是否正确配对出现的算法，并测试。
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
bool judge(string str) {
    stack<char> st;
    for (auto c: str) {
        if (c == '(' || c == '[' || c == '{') {
            st.push(c);
        } else {
            char cur = st.top();
            if (cur == '(' && c == ')' || cur == '[' && c == ']' || cur == '{' && c == '}') {
                st.pop();
            } else {
                return false;
            }
        }
    }
    return st.empty();
}
int main(void) {
    vector<string> test;
    string a = "()[]{}";
    string b = "{()}[]";
    string c = "[(}]";
    test.push_back(a);
    test.push_back(b);
    test.push_back(c);
    for (auto str: test) {
        if (judge(str)) {
            cout << "yes";
        } else {
            cout << "no";
        }
        cout << endl;
    }

    return 0;
}
